#include <iostream>
#include "TreeNode.h"
#include "getMaxDepth.h"
#include "dfs_tree.h"
#include "bfs_tree.h"
#include "TreeOperator.h"
using namespace std;
int* lastValue = nullptr;
//bool isValidBST(TreeNode* root){
//    if(root){
//        if(!isValidBST(root->left))
//            return false;
//        if(lastValue&&*lastValue>=root->val)
//            return false;
//        lastValue = &root->val;
//        if(!isValidBST(root->right))
//            return false;
//        return true;
//    }else
//        return true;
//}



int main() {
//    TreeNode* root = new TreeNode(3);
//    TreeNode* a = new TreeNode(9);
//    TreeNode* b = new TreeNode(20);
//    TreeNode* c = new TreeNode(15);
//    TreeNode* d = new TreeNode(7);
//
//    root->left = a;
//    root->right =b;
//    b->left = c;
//    b->right = d;
//    int max_depth = 0;
//    int current_depth = 0;
//    cout<<getMaxDepth(root);
//    TreeNode *root = new TreeNode(1);
//    TreeNode *a = new TreeNode(2);
//    TreeNode *b = new TreeNode(4);
//    TreeNode *c = new TreeNode(5);
//    TreeNode *d = new TreeNode(6);
//    root->left = a;
//    root->right = b;
//    a->left = c;
//    a->right = d;
//    vector<vector<int>>result = travel_layer(root);
//    for(auto e:result){
//        for(auto elem:e){
//            cout<<elem<<" ";
//        }
//        cout<<endl;
//    }

//    cout<<boolalpha<<isSymmetric(nullptr);
    TreeNode *root = new TreeNode(1);
    TreeNode *a = new TreeNode(1);
    TreeNode *b = new TreeNode(15);
    TreeNode *c = new TreeNode(6);
    TreeNode *d = new TreeNode(22);
    root->left = a;
//    root->right = b;
//    b->left =c;
//    b->right=d;
    cout<<boolalpha<<isValidBST(root);

    delete root;
    delete a;
    delete b;
    delete c;
    delete d;
    return 0;
}